[レポート] Build a scalable cross-platform multiplayer game backend on AWS #GAM301-R1

[レポート] Build a scalable cross-platform multiplayer game backend on AWS #GAM301-R1

AWS Game Backend FrameworkとAmazon GameLiftを利用して安全でスケーラブルなゲームサービスのバックエンドを構築するワークショップに参加しました。内容の紹介と感想を記録します
Clock Icon2024.12.06

こんばんは、リテールアプリ共創部のmorimorikochanです。
ワークショップに参加したので、内容の紹介と感想を記録します。

セッション概要

セッションカタログの内容は以下のとおりです。

タイトル

GAM301-R1 | Build a scalable cross-platform multiplayer game backend on AWS [REPEAT]

概要

In this workshop, learn how to use the AWS Game Backend Framework to develop a custom cross-platform game backend for your multiplayer game. Explore cross-platform player identity, backend microservices for matchmaking, and integrations to popular game engines. Also learn how to use Amazon GameLift to host your game servers globally, close to players for a low-latency real-time experience. You must bring your laptop to participate.

その他

  • Session types: Workshop
  • Topic: Architecture, Serverless Compute & Containers
  • Industry : Games
  • Area of interest: Well-Architected Framework
  • Level: 300 – Advanced
  • Services: Amazon Cognito, Amazon GameLift

内容の紹介

まず初めに8分ほど、ゲームのバックエンドやAmazon GameLiftについての説明がありましたので、軽く紹介します

min.IMG_0305
min.IMG_0306
min.IMG_0307
min.IMG_0308

ゲームのバックエンドではユーザーの認証機能やソーシャル機能を提供しますが、スケーラビリティやオブサーバビリティや蝋料がかかるなど、課題があります。

min.IMG_0309

これらの課題に対してアプローチする方法が2つあります。1つはSaaSを利用する方法、もう1つは自身でホスティングし管理する方法です。
前者はAWSのパートナーソリューションと連携が可能であるのに対し、後者は細かなコントロールが可能というメリットがあります。

これらの中間に位置するものが今日紹介するAWS Game Backend Frameworkです。
ゲームのバックエンドの一部をカスタマイズし他の部分をマネージドサービスに頼ることができます。
また、これは全てオープンソースです

ただし、今日のワークショップでは独自のゲームサーバーを構築せず代わりにAmazon GameLiftを利用します。

min.IMG_0310
min.IMG_0311
min.IMG_0312

Amazon GameLiftを使うと、ホスティングするゲームサーバーの必要性能に応じて柔軟にサーバーが選択できます。また、低遅延と高可用性も手に入れることが可能です。 また、複数のリージョンで利用可能なため複数の地域でゲームを提供することが可能です

min.IMG_0313

min.IMG_0317

AWS Game Backend FrameworkはCDKで提供されており、チャット機能やマルチプレイヤー機能・友達機能などがあらかじめサンプルとして含まれています

min.IMG_0319

AWS Game Backend Frameworkの動作イメージです。
ゲームクライアントにAWS Game SDKを導入し、ユーザーを認証する際にはそのSDKからIdentity componentを呼び出すことで認証情報を保持することができ、SDKを使って別で構築されたバックエンドコンポーネントを認証情報付きで呼び出すことができます。

min.IMG_0320

今回のワークショップでは、"別で構築されたバックエンドコンポーネント"としてAmazon GameLiftを利用します。

やったこと

まず初めにidentity componentをCDKでデプロイしました。CDKのコードは以下から参照できます。

https://github.com/aws-solutions-library-samples/guidance-for-custom-game-backend-hosting-on-aws/tree/main/CustomIdentityComponent

デプロイした後はこのような構成になっており、
ゲームクライアントから呼び出すことができるAPI GatewayとCloudFrontが提供されます。
このうちCloudFrontはJWKsエンドポイントを提供しています。JWKsエンドポイントとは、
AWS Game Backend Frameworkではユーザーの認証情報がJWTで表現されるのですが、このJWTを検証するためのエンドポイントです。

名称未設定ファイル-ページ5

また、その後はGameLift関連のリソースをデプロイしていきます。

色々一気にデプロイされています。
重要なのは、Amazon GameLift FlexMatchとAmazon GameLift Multi-Location Fleetです。

AWS LambdaからAmazon GameLift FlexMatchがマッチメイキングのリクエストを受け、その結果をAmazon SNS, AWS Lambda, DynamoDBを通して記録され、それを別のAWS Lambdaが定期的にポーリングするような構成となっています。

また、SQSがAmazon GameLift FlexMatchからのリクエストを受けて、地理的に最適なフリートにデータを渡し、そのフリートがセッションを用意します。

デプロイが終わったのちに負荷テストを行ったところ、実際にうまく動作しており、なおかつCloudWatchにログやメトリクスが正しく出力されていることがわかりました。

スクリーンショット 2024-12-05 13.54.09

スクリーンショット 2024-12-05 13.55.18

Godot Engineで起動させる場合の手順・注意点

また、AWS Game Backend Frameworkのリポジトリには実際にゲームエンジンから呼び出すサンプルもついているとのことだったので、Godot Engineをインストールし起動させてみました。
Unityを最初は検討していましたが、インストーラーのサイズが大きすぎて諦めました。Godot Engineは数百MB程度でしたのでお手軽に導入が可能です。

Godot Engineをインストールした後、起動する前にあらかじめGodotSample/BackendFeatures/AmazonGameLiftIntegration/AmazonGameLiftIntegration.gdのファイルの以下の部分を修正します。すでにこの値は前述のワークショップで手に入れれているはずです

スクリーンショット 2024-12-05 14.14.44

Godot Engineで開くファイルは GodotSample/project.godotです。リポジトリに記載のファイルはv4.3では開くことができませんでした。

また、Godot Engineのプロジェクト起動後にシーンを実行する必要があるのですが、押すのは画面右上のツールバーの左端のボタンではなく、右から3番目のボタンです。

スクリーンショット 2024-12-05 14.14.23のコピー

うまくいくと以下のようにコンソール部分にログが出力されます。

スクリーンショット 2024-12-05 14.15.15のコピー

感想

  • ワークショップ初参加でしたが、なんとか終えることができました。
    • AWSが提供するワークショップのページがわかりやすかったのですんなり内容を理解できたように思います。
  • GameLiftやAWS Game Backend Frameworkを全く知らない状態で受けましたが、今回デプロイした範囲についてはしっかり理解できたと思います。
    • ただし、GameLift自体がさまざまな機能を持っているようなのでまだまだ実務で利用するには学習が必要だなと感じます。
  • せっかく理解したので何かしら趣味で使ってみたいなと思います

参考資料

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.